package store

import (
	"file_explorer/common/consts"
	"file_explorer/model"
	"file_explorer/service/eventbus"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
)

// tab接口，每类TabContext需要实现
type TabContext interface {
	GetTabType() string
	GetTabLabel() string
	GetTabIcon() fyne.Resource

	GetTabItem() *container.TabItem
	SetTabItem(*container.TabItem)

	GetGlobalContext() *GlobalContext
}

type DefaultTabContext struct {
	*eventbus.EventBus

	tabItem *container.TabItem
	gCtx    *GlobalContext
}

func (ctx *DefaultTabContext) GetTabType() string {
	return consts.TabTypeDefault
}
func (ctx *DefaultTabContext) GetTabLabel() string {
	return consts.TabTypeDefault
}
func (ctx *DefaultTabContext) GetTabIcon() fyne.Resource {
	return nil
}
func (ctx *DefaultTabContext) GetTabItem() *container.TabItem {
	return ctx.tabItem
}
func (ctx *DefaultTabContext) SetTabItem(tabItem *container.TabItem) {
	ctx.tabItem = tabItem
}
func (ctx *DefaultTabContext) GetGlobalContext() *GlobalContext {
	return ctx.gCtx
}
func (ctx *DefaultTabContext) GetGlobalConf() *model.GlobalConf {
	return ctx.gCtx.GetGlobalConf()
}
func (ctx *DefaultTabContext) UpdateGlobalConf(confKey string, confVal interface{}) error {
	return ctx.gCtx.UpdateGlobalConf(confKey, confVal)
}

func newDefaultTabContext(gCtx *GlobalContext) DefaultTabContext {
	return DefaultTabContext{
		EventBus: eventbus.NewEventbus(),
		gCtx:     gCtx,
	}
}
